0

我正在尝试从 servlet 获得响应并将其显示在模拟器上。能够获得响应,但是当我尝试在屏幕上显示响应时,setText 抛出空指针异常。查不出原因。我对android很陌生,请帮助我。

包 com.example.httptest;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import com.demo.parser.XmlParser;

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

public class MainActivity extends Activity {

    public static final String url = "http://192.168.3.140:8080/HttpServlet/TestServlet";
    //public static final String url = "http://192.168.3.228/capture/employeeList.xml";
    String output = null;
    TextView outpuText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void invokeServlet(View view){
        AsyncTest test = new AsyncTest();
        System.out.println("URL--------------"+url);
        setContentView(R.layout.activity_main);
        test.execute(new String[] { url });
    }

    private class AsyncTest extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... urls) {
            // TODO Auto-generated method stub
            String output = null;

            for(String url :urls){
                System.out.println("url1 "+url);
                output = getOutputFromUrl(url);
                System.out.println("output----------"+output);

                /*EditText text = (EditText) findViewById(R.id.output);

                 text.setText(output);

                */

            }

            return output;
        }

         private String getOutputFromUrl(String url) {
             System.out.println("in hereeeeeeeeeee");

                try {
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet(url);

                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    output = EntityUtils.toString(httpEntity);
                    System.out.println("output1 "+output);
                   // XmlParser.XMLfromString(output);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return output;
            }


         protected void onPostExecute(String output){

             setContentView(R.layout.activity_main);
             outpuText.setText(output);


             setContentView(outpuText);
         }



    }

}
4

4 回答 4

0

在 setContentView() 之后添加outpuText=(TextView)findViewbyId(R.id.textId);onCreate 方法会帮助你。

不要忘记从 postExecute() 中删除 setContentView()。

于 2013-01-07T05:41:03.673 回答
0

1) 引用 outputText。我的意思是 outputText = (TextView) findViewById(R.id.textView1); 在 onCreate 方法中。

2) 移除 setContentView(R.layout.activity_main); 在 onPostExecute(字符串输出)中。

于 2013-01-07T05:41:22.610 回答
0

试试这个它解决了你的问题

 outpuText = (TextView)findViewById(R.id.textviewid);

其中 textviewid 是您的文本视图 ID

于 2013-01-07T05:41:26.570 回答
0

Issue resolved by adding following step in onCreate method,

outpuText = new TextView(this);

Thanks for your time guys!!

于 2013-01-08T04:25:53.273 回答