-2

저는 Android 개발에서 newbee입니다. 나는 앱이 로그인을 포함하고 있다는 것을 개발했다. 자격 증명은 텍스트 필드에 전달되어야하고 나중에 웹 서비스를 호출 할 것이다. 사용자와 비밀번호가 필요한 위치에 복사되지 않아 문제가 발생했습니다. 도와주세요.텍스트 필드의 값을 검색 할 수 없습니다.

package com.authorwjf.http_get; 

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

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 

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

public class Main extends Activity implements OnClickListener { 

    EditText txtUserName; 
    EditText txtPassword; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     txtUserName=(EditText)this.findViewById(R.id.editText1); 
     txtPassword=(EditText)this.findViewById(R.id.editText2); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     findViewById(R.id.my_button).setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View arg0) { 
     Button b = (Button)findViewById(R.id.my_button); 
     b.setClickable(false); 
     new LongRunningGetIO().execute(); 
    } 

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

     protected String getASCIIContentFromEntity(HttpEntity entity) throws IllegalStateException, IOException { 
      InputStream in = entity.getContent(); 
      StringBuffer out = new StringBuffer(); 
      int n = 1; 
      while (n>0) { 
       byte[] b = new byte[4096]; 
       n = in.read(b); 
       if (n>0) out.append(new String(b, 0, n)); 
      } 
      return out.toString(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 

      String user= txtUserName.getText().toString(); 
      String pass= txtPassword.getText().toString(); 

      System.out.println("USERRRR"+user); 
      System.out.println(pass); 

      //String user="[email protected]"; 
      //String pass= "123456"; 

      String accessTokenQry = "{"+ 
         "\"uid\":\""+user+"\","+ 
         "\"password\":\""+pass+"\","+ 
         "\"consumptionDeviceId\":\"fder-et3w-3adw2-2erf\","+ 
         "\"consumptionDeviceName\":\"Samsung Tab\""+ 
        "}"; 

      HttpPost httpPost = new HttpPost("http://devssg01.ril.com:8080/v2/dip/auth/login"); 
      httpPost.setHeader("Content-Type", 
        "application/json"); 
      httpPost.setHeader("X-API-Key", 
        "l7xx7914b8704b2d4b029ab9c4b1b9c66dbf"); 
      StringEntity input; 
      try { 
       input = new StringEntity(accessTokenQry); 
       httpPost.setEntity(input); 
      } catch (UnsupportedEncodingException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 



      String text = null; 
      try { 
        HttpResponse response = httpClient.execute(httpPost, localContext); 
        HttpEntity entity = response.getEntity(); 
        text = getASCIIContentFromEntity(entity); 
      } catch (Exception e) { 
       return e.getLocalizedMessage(); 
      } 
      return text; 
     } 

     protected void onPostExecute(String results) { 
      if (results!=null) { 
       EditText et = (EditText)findViewById(R.id.my_edit); 
       et.setText(results); 
      } 
      Button b = (Button)findViewById(R.id.my_button); 
      b.setClickable(true); 
     } 
    } 
} 

로그 캣 출력은 다음과 같습니다

08-10 01:20:23.977: W/dalvikvm(760): threadid=14: thread exiting with uncaught exception (group=0x414c4700) 
08-10 01:20:23.984: E/AndroidRuntime(760): FATAL EXCEPTION: AsyncTask #4 
08-10 01:20:23.984: E/AndroidRuntime(760): java.lang.RuntimeException: An error occured while executing doInBackground() 
08-10 01:20:23.984: E/AndroidRuntime(760): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.lang.Thread.run(Thread.java:841) 
08-10 01:20:23.984: E/AndroidRuntime(760): Caused by: java.lang.NullPointerException 
08-10 01:20:23.984: E/AndroidRuntime(760): at com.authorwjf.http_get.Main$LongRunningGetIO.doInBackground(Main.java:66) 
08-10 01:20:23.984: E/AndroidRuntime(760): at com.authorwjf.http_get.Main$LongRunningGetIO.doInBackground(Main.java:1) 
08-10 01:20:23.984: E/AndroidRuntime(760): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
08-10 01:20:23.984: E/AndroidRuntime(760): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
08-10 01:20:23.984: E/AndroidRuntime(760): ... 3 more 
+0

그래도 버그가 있습니까? 그렇다면 postcatcat – KOTIOS

답변

1

당신은 레이아웃을로드하기 전에 EditText의 초기화하려고합니다.

레이아웃에서 편집 텍스트를 가져 오려면 레이아웃을로드 한 후에 텍스트를 초기화해야합니다.

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     findViewById(R.id.my_button).setOnClickListener(this); 

     txtUserName=(EditText)this.findViewById(R.id.editText1); 
     txtPassword=(EditText)this.findViewById(R.id.editText2); 
    } 
1

사용하는 코드에서이

   EditText textw3d =(EditText) findViewById(R.id.editText3d); 
       final String strd3d = textw3d.getText().toString(); 
1

나는 다음과 같은 제안의 변화 : 여기

는 올바른 코드입니다.

그냥 다음 쓰기 라인

super.onCreate (savedInstanceState); setContentView (R.layout.main);

상기

txtUserName = (글고) this.findViewById (R.id.editText1); txtPassword = (EditText) this.findViewById (R.id.editText2);

1
당신이 참조가 된 setContentView 함수 호출 후에 의견을 텍스트로 얻을 라인을 이동

:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    findViewById(R.id.my_button).setOnClickListener(this); 

    txtUserName=(EditText)this.findViewById(R.id.editText1); 
    txtPassword=(EditText)this.findViewById(R.id.editText2); 
} 

사실이 호출이 있기 때문에 당신이 당신의 레이아웃에 어떤 위젯을 초기화하기 전에 된 setContentView를 호출 할 필요가있다 "가 layout_main.xml 파일에 정의 된 레이아웃을 활동에로드합니다.

0

고맙습니다. Guyz, 문제가 해결되었습니다. JustWork 특별 감사의 말씀

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     findViewById(R.id.my_button).setOnClickListener(this); 

     txtUserName=(EditText)this.findViewById(R.id.editText1); 
     txtPassword=(EditText)this.findViewById(R.id.editText2); 
    } 
관련 문제