1

接続の新しいインスタンスを作成するアクティビティがあります。このような:

public class myActivity extends Activity {

TextView tv;
ProgressDialog dialog = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.daily_news);

    gestureDetector = new GestureDetector(new SwipeGestureDetector());
    tv = (TextView) findViewById(R.id.tx);
    dialog = ProgressDialog.show(myActivity.this, "","Validating user...", true);
    connection con = new connection(dialog);
    final String str =con.connect_to_db("http://10.0.2.2:8000/daily/my.php");

    runOnUiThread(new Runnable() {
        public void run() {
            tv.setText(str);
            dialog.dismiss();
        }
    });        
}

}

接続クラスには、null を返す HttpResponse があります。このような:

public class connection {

private HttpPost httppost;
private HttpClient httpclient;
private HttpResponse response;
private ProgressDialog dialog = null;
private String result;

 public connection(ProgressDialog di){
     dialog = di;
 }
public String connect_to_db(String url){

    try{            
        httpclient=new DefaultHttpClient();
        httppost= new HttpPost(url); 
        response=httpclient.execute(httppost);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        result = httpclient.execute(httppost, responseHandler);
    }catch(Exception e){
        dialog.dismiss();
        System.out.println("Exception : " + e.getMessage());
    }
    return result;
}

}

接続クラスの「結果」の値がnullなのはなぜですか?

4

2 に答える 2

1

この行:

 final String str =con.connect_to_db("http://10.0.2.2:8000/daily/my.php");

onCreate ではなく、別のスレッドに記述する必要があります => NetworkOnMainThreadException

NullPointer については、マニフェストにインターネット アクセス許可があるかどうか、応答が null かどうかをお知らせください。

于 2012-12-01T09:43:06.780 に答える
0

onCreate メソッドでネットワーク操作を行っているためかもしれません。android2.2 を使用している場合は問題ありませんが、HoneyComb の場合は何らかの例外が発生し、最終的に null 値が取得される可能性があります。コードを onResume() メソッドに移動します。

シンプルな使用のために

HttpResponse 応答 = httpclient.execute(httppost);

String valueString = EntityUtils.toString(response.getEntity());
int  statusCode = response.getStatusLine().getStatusCode();

これらの値を印刷して、出力を確認します。

于 2012-12-01T09:45:26.597 に答える