마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask 에러 질문입니다.

0 추천
edittext에 받은 값을 mysql db로 insert하는 예제입니다.
ui 쓰레드에서 직접 돌리면 안된다길래 asynctask를 사용했는데요,
자꾸 오류가 뜹니다.
해당 코드와 오류 첨부하니 안드로이드 고수 분 도움 부탁드려요....
여기에 쏟은 시간이 엄청 많아요.../
 
 
 
*코드*
public class RegisterUser extends ActionBarActivity implements OnClickListener {
 
private EditText user, pass;
private Button mRegister;
 
private ProgressDialog pDialog;
 
JSONParser jsonParser = new JSONParser();
 
private static final String LOGIN_URL = "http://내 서버 아이피/insert.php";
 
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
 
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_user);
 
user = (EditText) findViewById(R.id.user_id);
pass = (EditText) findViewById(R.id.user_secret);
 
mRegister = (Button) findViewById(R.id.save_user);
mRegister.setOnClickListener(this);
}
 
public void onClick(View v) {
// TODO Auto-generated method stub
 
new CreateUser().execute();
 
}
 
class CreateUser extends AsyncTask<String, String, String> {
 
boolean failure = false;
 
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(RegisterUser.this);
pDialog.setMessage("등록 중입니다.");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
 
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String username = user.getText().toString();
String password = pass.getText().toString();
String phone = "010-1234-5678";
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", username));
params.add(new BasicNameValuePair("user_secret", password));
params.add(new BasicNameValuePair("user_phone", phone));
 
Log.d("request!", "starting");
 
// Posting user data to script
JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST",
params);
// json success element
success = (int)json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("User Created!", json.toString());
finish();
return json.getString(TAG_MESSAGE);
} else {
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
 
}
} catch (JSONException e) {
e.printStackTrace();
 
}
 
return null;
 
}
 
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(RegisterUser.this, file_url, Toast.LENGTH_LONG)
.show();
}
 
}
 
}
 
}
 
 

 

익명사용자 님이 2014년 12월 11일 질문
*오류*






: E/JSON PArser(32749): Error Parsing dataorg.json.JSONException: End of input at character 2 of
W/dalvikvm(32749): threadid=12: thread exiting with uncaught exception (group=0x419d5da0)
E/AndroidRuntime(32749): FATAL EXCEPTION: AsyncTask #1
 E/AndroidRuntime(32749): Process: com.example.miyoung, PID: 32749
E/AndroidRuntime(32749): java.lang.RuntimeException: An error occured while executing doInBackground()
 E/AndroidRuntime(32749):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
 E/AndroidRuntime(32749):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
: E/AndroidRuntime(32749):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime(32749):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
 E/AndroidRuntime(32749):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime(32749):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime(32749):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
 E/AndroidRuntime(32749):  at java.lang.Thread.run(Thread.java:841)
E/AndroidRuntime(32749): Caused by: java.lang.NullPointerException
 E/AndroidRuntime(32749):  at com.example.miyoung.RegisterUser$CreateUser.doInBackground(RegisterUser.java:94)
 E/AndroidRuntime(32749):  at com.example.miyoung.RegisterUser$CreateUser.doInBackground(RegisterUser.java:1)
E/AndroidRuntime(32749):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
E/AndroidRuntime(32749):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(32749):  ... 4 more
E/WindowManager(32749): android.view.WindowLeaked: Activity com.example.miyoung.RegisterUser has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42cdf180 V.E..... R......D 0,0-1026,288} that was originally added here
E/WindowManager(32749):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:436)
E/WindowManager(32749):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267)
 E/WindowManager(32749):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
 E/WindowManager(32749):  at android.app.Dialog.show(Dialog.java:288)
 E/WindowManager(32749):  at com.example.miyoung.RegisterUser$CreateUser.onPreExecute(RegisterUser.java:70)
E/WindowManager(32749):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
 E/WindowManager(32749):  at android.os.AsyncTask.execute(AsyncTask.java:535)
 E/WindowManager(32749):  at com.example.miyoung.RegisterUser.onClick(RegisterUser.java:52)
E/WindowManager(32749):  at android.view.View.performClick(View.java:4630)
E/WindowManager(32749):  at android.view.View$PerformClick.run(View.java:19339)
E/WindowManager(32749):  at android.os.Handler.handleCallback(Handler.java:733)
 E/WindowManager(32749):  at android.os.Handler.dispatchMessage(Handler.java:95)
 E/WindowManager(32749):  at android.os.Looper.loop(Looper.java:157)
E/WindowManager(32749):  at android.app.ActivityThread.main(ActivityThread.java:5335)
 E/WindowManager(32749):  at java.lang.reflect.Method.invokeNative(Native Method)
 E/WindowManager(32749):  at java.lang.reflect.Method.invoke(Method.java:515)
: E/WindowManager(32749):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
: E/WindowManager(32749):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
 E/WindowManager(32749):  at dalvik.system.NativeStart.main(Native Method)

1개의 답변

0 추천

E/AndroidRuntime(32749): Caused by: java.lang.NullPointerException
 E/AndroidRuntime(32749):  at com.example.miyoung.RegisterUser$CreateUser.doInBackground(RegisterUser.java:94)

 

라고 되어있으니 해당 라인의 내용 중에서 null 처리 미숙한 부분을 수정하면 되겠네요.

cc1232 (35,280 포인트) 님이 2014년 12월 11일 답변
댓글 감사합니다:)
최종적으로 db에 값이 들어가기는 하는데 db insert 성공 여부가 뜨기 전 바로 앱이 중지되네요... 값 들어가면 null은 아닌 것 같은데 뭐가 문제일까요....ㅜㅜ
로그에서는 RegisterUser.java:94에서 널 참조 라고 나오니까, 해당 라인을 보시라는거죠. 제쪽에서는 해당 파일의 94라인이 어느 내용인지 알 수가 없어요.
db에 값 저장된다고 하셨는데, 올려주신 소스에는 db를 쓰는 부분도 없습니다.
db에 저장되는 값이 null인게 아니라, 다른 호출하는 부분의 값이 null이라 그럴 듯 해요. (예를 들어 json.getInt 같은 부분에서 json이 널인 경우)
...