2012-03-22 2 views
1

나는 안드로이드 2.3.3에 대한 안드로이드 소켓 클라이언트 응용 프로그램을 만들었습니다. XML 요청을 보낸 다음 cobol 소켓 서버에서 응답을 다시받습니다.ProgressDialog가 사라지지 않을 것입니다! nullpointer 예외

클라이언트 응용 프로그램이 서버에 연결하고 데이터를 보내고받는 동안 progressdialog를 팝업으로 표시하려고합니다.

그리고 팝업 않습니다 (조금 늦게하지만),하지만 난 NullPointerException이 점점없이 해고하지 못할

내 코드 :

.

public class OctopusActivity extends Activity implements OnClickListener 
{ 
    //My variables 
    ProgressDialog progressDialog; 


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

     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 

     Varenummer = (EditText) findViewById(R.id.editText1); 
     Varetekst = (EditText) findViewById(R.id.editText2); 
     Gruppe = (EditText) findViewById(R.id.editText3); 
     Producent = (EditText) findViewById(R.id.editText4); 
     Enhed = (EditText) findViewById(R.id.editText5); 
     Pris = (EditText) findViewById(R.id.editText6); 

    } 
    class ClientThread implements Runnable 
    { 


     public void run() 

     { 

      try 
      { 
       Korer = true; 
      Log.d("Nicklas", "Thread Igang"); 
      Socket socket = new Socket(serverIpAddress, serverPort); 
      socket.setSoTimeout(5000); 
      Log.d("Nicklas", "socket lavet"); 

        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
        Log.d("Nicklas", "Printer Oprettet"); 

        String request = ("XML Request"); 
        out.println(request); 
        out.flush(); 

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        Log.d("Nicklas", "Reader Oprettet"); 
        Vector<String> v = new Vector<String>(); 
        int i = 0; 
        Boolean KeepGoing = true; 
        while (KeepGoing) 
        { 

         try 
         { 
          String lol = in.readLine(); 
          if (lol.contains("</Answer>")) { KeepGoing = false; } 
          v.add(new String(lol)); 
          i++; 
         } 
         catch (Exception e) 
         { 
          Log.d("NickEEEXX", e.toString()); 
          KeepGoing = false; 
         }      
        } 

        Log.d("Trolo", String.valueOf(i)); 

        in.close(); 
        out.close(); 
        socket.close(); 

        String[] InputLinie = new String[i]; 

        v.toArray(InputLinie); 

        // This is where i treat the data 

        Korer = false; 
        Log.d("NicklasMEH", "KAgemand!"); 
        // The error comes on the following line: 
        progressDialog.dismiss(); 

      } 
      catch (Exception e) 
      { 
       Log.d("NicklasEx", e.toString()); 
       varetekst = "Kunne ikke forbinde til server"; 
       Korer = false; 

      } 

     } 

    } 
    @Override 
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 
      Varetekst.setText(""); 
      Gruppe.setText(""); 
      Producent.setText(""); 
      Enhed.setText(""); 
      Pris.setText(""); 
      Log.d("Nicklas", "Starter thread"); 
      progressDialog.show(this, "", "Loading"); 

      if (!Korer) 
      { 
       Thread thread = new Thread(new ClientThread()); 
       thread.start(); 

      } 

    } 

} 

그래서 제 질문은 다음과 같습니다 1. dialogprocess은 조금 늦게 나타납니다. 팝업이 나타나기를 원합니다. 그런 다음 스레드가 시작되기를 원합니다. 2. 왜 progressDialog.dismiss();에서 nullpointer 예외가 발생합니까?

도움이 될 것입니다.

답변

2

progressDialog를 어디에 두었습니까?

progressDialog =ProgressDialog.show(OctopusActivity.this,"title","message"); 
+1

변수는 onCreate 위에 선언됩니다. 그런 다음 .show (및 스레드)는 onClick 메서드에서 호출됩니다. – user1285334

+2

라인이 방금 고쳤습니다! 변경됨 'progressDialog.show (this, "", "Loading"); ' to 'progressDialog = ProgressDialog.show (OctopusActivity.this, "title", "message"); '이제는 완벽하게 작동합니다! 덕분에 – user1285334

+1

예! 그 의견을 게시 주셔서 감사합니다. 그게 내가 필요한거야. –

관련 문제