2012-07-16 4 views
0

Android에서 HTTP를 처음 사용하는 데 익숙합니다. JSON 객체를 사용하여 HTTP Post를 통해 필요한 정보를 보내는 로그인을 인증하려고 시도하고 있습니다.Android Testerfield가 실패했습니다. - Android HTTPPost with JSON 객체

앱을 실행할 때 액세스 URL, 사용자 이름 및 비밀번호에 설치를 추가하라는 로그인 화면을 사용하여 로그인합니다. 입력 한 다음 확인 버튼을 누르면 앱이 다운되고 "유감스럽게도 TesterField가 중지되었습니다."라는 메시지가 나타납니다.

LOGCAT에서 식별되는 내용을 해독 할 수 없습니다.

누군가이 (런타임) 오류의 원인을 알려주시겠습니까?

CODE :

package name.company.androidlogin; 

import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HTTP; 
import org.json.JSONException; 
import org.json.JSONObject; 

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

public class LoginScreen extends Activity { 

    private Button loginButton; 
    private TextView resultText; 
    private EditText usernameText; 
    private EditText passwordText; 
    private EditText installText; 
    private String accessURL = "http://url"; 
    public final String CONSUMER_KEY = "KEY"; 
    public final String CONSUMER_SECRET = "SECRET"; 

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

     loginButton = (Button) findViewById(R.id.btn_login); 
     resultText = (TextView) findViewById(R.id.lbl_result); 
     usernameText = (EditText) findViewById(R.id.txt_username); 
     passwordText = (EditText) findViewById(R.id.txt_password); 
     installText = (EditText) findViewById(R.id.txt_install); 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.login_screen, menu); 
     return true; 
    } 
    public void sendJson() 
    { 
     JSONObject jOb; 
     try { 
      jOb = toJSON(); 
      HttpPost httpPost = new HttpPost(accessURL); 
      StringEntity entity = new StringEntity(jOb.toString(), HTTP.UTF_8); 
      entity.setContentType("application/json"); 
      httpPost.setEntity(entity); 
      HttpClient client = new DefaultHttpClient(); 
      HttpResponse response = client.execute(httpPost); 
      resultText.setText(response.getStatusLine().getStatusCode()+" "+response.getStatusLine().getReasonPhrase()); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public JSONObject toJSON() throws JSONException { 
     JSONObject credentials = new JSONObject(); 
     try { 
      credentials.put("ConsumerSecret", CONSUMER_SECRET); 
      credentials.put("ConsumerKey", CONSUMER_KEY); 
      credentials.put("Password", passwordText.getText()); 
      credentials.put("Username", usernameText.getText()); 
     } finally { 
      resultText.setText(credentials.toString(2)); 
     } 
     return credentials; 
    } 
} 

LOG의 CAT :

07-16 13:55:50.834: I/ActivityManager(93): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=name.company.testerfield/.URLBuilder bnds=[120,402][240,552]} from pid 192 
07-16 13:55:50.834: W/WindowManager(93): Failure taking screenshot for (180x300) to layer 21005 
07-16 13:55:50.954: D/dalvikvm(1122): Not late-enabling CheckJNI (already on) 
07-16 13:55:50.997: I/ActivityManager(93): Start proc name.company.testerfield for activity name.company.testerfield/.URLBuilder: pid=1122 uid=10040 gids={3003} 
07-16 13:55:51.134: I/WindowManager(93): createSurface Window{415d4950 Starting name.company.testerfield paused=false}: DRAW NOW PENDING 
07-16 13:55:51.474: W/NetworkManagementSocketTagger(93): setKernelCountSet(10040, 1) failed with errno -2 
07-16 13:55:52.474: I/WindowManager(93): createSurface Window{41620b70 name.company.testerfield/name.company.testerfield.URLBuilder paused=false}: DRAW NOW PENDING 
07-16 13:55:52.604: D/gralloc_goldfish(1122): Emulator without GPU emulation detected. 
07-16 13:55:52.704: I/ActivityManager(93): Displayed name.company.testerfield/.URLBuilder: +1s788ms 
07-16 13:55:52.974: W/NetworkManagementSocketTagger(93): setKernelCountSet(10005, 0) failed with errno -2 
07-16 13:55:55.054: I/WindowManager(93): createSurface Window{415cdbe0 InputMethod paused=false}: DRAW NOW PENDING 
07-16 13:55:56.084: D/dalvikvm(147): GC_CONCURRENT freed 306K, 35% free 10784K/16455K, paused 6ms+8ms 
07-16 13:56:09.504: D/dalvikvm(93): GC_CONCURRENT freed 483K, 10% free 12354K/13639K, paused 6ms+33ms 
07-16 13:56:13.364: D/dalvikvm(376): GC_CONCURRENT freed 499K, 6% free 11433K/12039K, paused 6ms+27ms 
07-16 13:56:17.134: D/AndroidRuntime(1122): Shutting down VM 
07-16 13:56:17.134: W/dalvikvm(1122): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
07-16 13:56:17.164: E/AndroidRuntime(1122): FATAL EXCEPTION: main 
07-16 13:56:17.164: E/AndroidRuntime(1122): java.lang.NullPointerException 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at java.net.URI.parseURI(URI.java:353) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at java.net.URI.<init>(URI.java:204) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at java.net.URI.create(URI.java:725) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at name.company.testerfield.URLBuilder.postLoginData(URLBuilder.java:57) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at name.company.testerfield.URLBuilder.onClick(URLBuilder.java:50) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.view.View.performClick(View.java:3480) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.view.View$PerformClick.run(View.java:13983) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.os.Handler.handleCallback(Handler.java:605) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.os.Looper.loop(Looper.java:137) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-16 13:56:17.164: E/AndroidRuntime(1122):  at dalvik.system.NativeStart.main(Native Method) 
07-16 13:56:17.204: W/ActivityManager(93): Force finishing activity name.company.testerfield/.URLBuilder 
07-16 13:56:17.204: W/WindowManager(93): Failure taking screenshot for (180x300) to layer 21010 
07-16 13:56:17.344: I/WindowManager(93): createSurface Window{41642a88 paused=false}: DRAW NOW PENDING 
07-16 13:56:17.724: W/ActivityManager(93): Activity pause timeout for ActivityRecord{4133b488 name.company.testerfield/.URLBuilder} 
07-16 13:56:17.743: W/NetworkManagementSocketTagger(93): setKernelCountSet(10005, 1) failed with errno -2 
07-16 13:56:17.814: I/WindowManager(93): createSurface Window{41622c28 com.android.launcher/com.android.launcher2.Launcher paused=false}: DRAW NOW PENDING 
07-16 13:56:18.694: W/NetworkManagementSocketTagger(93): setKernelCountSet(10040, 0) failed with errno -2 
07-16 13:56:28.634: W/ActivityManager(93): Activity destroy timeout for ActivityRecord{4133b488 name.company.testerfield/.URLBuilder} 

편집 : 나는 다른 요구 사항을 언급해야한다 : - "응용 프로그램/JSON과 콘텐츠 유형을 설정을; 문자셋 = UTF-8 " 은 - 응답의 일부로서

감사

+0

알아 두어야 할 사항입니다. (그룹 = 0x409961f8) 07-16 13 : 56 : 17.164 : E/AndroidRuntime (1122) : 치명적인 예외 (그룹 = 0x409961f8)로 스레드가 종료되었습니다. main 07-16 13 : 56 : 17.164 : E/AndroidRuntime (1122) : java.lang.NullPointerException 일부 변수는 null이며, 사용자가 뭔가를하려고합니다. – Maxim

답변

0

오류가 주 스레드에서 인터넷에 연결하려고 시도했다가 쿠키를 받게 될 것입니다. AsyncTask를 사용하여 백그라운드에서 다른 스레드의 인터넷 연결을 수행했습니다.

관련 문제