0

PNR ステータスを取得するために Web サービスを呼び出すアプリケーションがあります。しかし、私は Web サービスを作成する初心者なので、Web サービスを作成して使用する方法を知るために、いくつかのビデオと例を確認しました。

stackoverflow で 1 つの質問を見つけましたhttps://stackoverflow.com/questions/14598485/need-indian-railway-apis-for-making-app-for-pnr-status-train-info-etcと、この質問で提供されているすべてのリンクそして私はこれを手に入れました:http://pnrapi.alagu.net/

私のコードは次のとおりです。

XML : activity_status_pnr.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText android:id="@+id/et_pnr"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/h"
        android:maxLength="10" />

    <Button android:id="@+id/pnr_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/gstatus" 
        android:layout_gravity="center" />


</LinearLayout>

JAVA コード : StatusPNR.java

package com.example.infopnr;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.io.IOException;  

import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  

import org.apache.http.client.ClientProtocolException;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.ResponseHandler;  
import org.apache.http.impl.client.BasicResponseHandler;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.DefaultHttpClient;  

public class StatusPNR extends Activity {  

  String URL = "http://pnrapi.alagu.net/api/v1.0/pnr/UR_PNR_CODE";  
  String result = "";  
  //String deviceId = "xxxxx" ;   
  //final String tag = "Your Logcat tag: ";  

  /** Called when the activity is first created. */  
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
      super.onCreate(savedInstanceState);  
      setContentView(R.layout.activity_status_pnr);  

      final EditText txtSearch = (EditText)findViewById(R.id.et_pnr);  
      txtSearch.setOnClickListener(new EditText.OnClickListener()
      {  
          public void onClick(View v){txtSearch.setText("");}
      });

      final Button btnSearch = (Button)findViewById(R.id.pnr_status);  
      btnSearch.setOnClickListener(new Button.OnClickListener(){  
          public void onClick(View v) {  
              String query = txtSearch.getText().toString();  
              PNRWebService(query);  

          }  
      });  

      } 

  private void PNRWebService(String q){


  }
}

ここでいくつかの問題に直面したため、まだ Web サービス メソッドを作成していません。一部の Web サイトで、HTTP クライアントの取得には Apache Web サーバーを使用する必要があると読みました。しかし、よくわかりませんし、なぜそれが何のためなのかわかりませんか?

私の質問は:

1)Webサーバーを取得するために何かをインストールする必要がありますか、それとも事前に何もインストールせずにWebサービスを呼び出すのにコーディングで十分ですか?

2) PNRWebService() メソッドで、接続を取得して URL でサービスを呼び出すために必要なことは何ですか? HTTPClient を介して接続を確立する必要があることはわかっていますが、多くの例やビデオを見た後、実際にどのように接続しているのかわかりませんでしたか?

3) http://pnrapi.alagu.net/このサイトを参照して、PNR ステータスを取得しようとしていますか? これを呼び出すには、これのURLが何であるか、およびURLを取得した後にさらに何をすべきかわからないため、何をする必要がありますか?

4) Apache からいくつかのパッケージをインポートしましたが、その価値があるかどうかわかりません。

誰かが良い知識を持っている場合は、助けてください。実行方法を教えてください。

4

2 に答える 2

1

わかった。まず、AsyncTask を使用することをお勧めします。あなたはそれをグーグルで調べて、それがどのように行われたかを知ることができます.

これがサンプルコードです

//Main Class
public class MainActivity extends Activity {

String url = "http://pnrapi.alagu.net/api/v1.0/pnr/UR_PNR_CODE";



//Your call to asynctask
 new asyncTask(this).execute(url);

}

//asyncTask class
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

public class asyncTask extends AsyncTask<String, Void, String> {
HttpResponse response = null;
    HttpClient httpClient = new DefaultHttpClient();
    private Context context;
    private ProgressDialog dialog;
    int code;
String codeValue = "";

    public asyncTask(Context cxt) {
        context = cxt;

        dialog = new ProgressDialog(context);
    }

    @Override
    protected String doInBackground(String... arg0) {

        Log.d("in ASyn Task", arg0[0]);

        HttpGet httpget = new HttpGet(arg0[0]);//This get your URL
        Log.d("after url in httpget", "after url");


        try {
            response = httpClient.execute(httpget);
            StatusLine line = response.getStatusLine();
            code = line.getStatusCode();
            codeValue = String.valueOf(code); 
            Log.d("code", codeValue);
            Log.d("Response", "Connected");
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            Log.d("Response 2", "not Connected in exception");
            e.printStackTrace();
        } catch (IOException e) { // TODO Auto-generatedcatch block
            Log.d("Response 3", e.toString());
        }



        return "Connected !!";
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        dialog.setTitle("Please Wait...");
        dialog.show();

        // Toast.makeText(asyncTask.this,"Please wait.. !! Uploading data to server",Toast.LENGTH_LONG).show();

    }
    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();

    AlertDialog.Builder alert = new AlertDialog.Builder(context);
    alert.setTitle("Alert");
    if (code == 200) {
        alert.setMessage("Connection to host established !! ")
                .setCancelable(false)
                .setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }

                        });

    }

    else {
        alert.setMessage("Error Connecting to server. Try Again")
                .setCancelable(false)
                .setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }

                        });
    }

    AlertDialog alertDialog = alert.create();
    alertDialog.show();
}

}

取得したコードが 200 かどうかを確認します。そうであれば、Web サービスとの接続を確立できます。(上記のコードの onPostExecute で行われます)

お役に立てれば

于 2013-07-08T09:05:42.117 に答える