AsyncTask가 모두 실행되기 전에 조각이 바뀝니다. 두 조각으로 응용 프로그램을 만들었습니다. 한 조각에서 나는 AsyncTask를 사용한다. 이 프로그램을 실행하고 조각을 빨리 바꿀 때 해당 응용 프로그램이 중지되었습니다.AsyncTask가 실행되기 전에 조각을 바꿉니다.
이 AsyncTask를를 사용하여 조각 1의 코드입니다
public class Fragment1 extends SherlockFragment {
EditText fragment1_edit_text;
Button fragment1_plus_button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container,savedInstanceState);
View rootView = inflater.inflate(R.layout.fragment1, container, false);
fragment1_edit_text = (EditText) rootView.findViewById(R.id.fragment1EditText);
fragment1_plus_button = (Button) rootView.findViewById(R.id.fragment1PlusButton);
fragment1_plus_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String link = "http://to.ly/api.php?longurl=";
String address = fragment1_edit_text.getText().toString();
link += address;
new getResult().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,link);
}
});
return rootView;
}
public class getResult extends AsyncTask<String, Void, String> {
String result = "fail";
String link = "";
@Override
protected String doInBackground(String... params) {
String link = params[0];
return GetSomething(link);
}
final String GetSomething(String address)
{
try {
link = address;
URL url = new URL(link);
InputStream response = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
result = reader.readLine();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
protected void onPostExecute(String result){
addLink(new Link(link.substring(29)+":", result));
}
}
DatabaseHelper helper;
private void addLink(Link link){
if(link.get_short_link().contains("http://to.ly/")){
helper = OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
RuntimeExceptionDao<Link, Integer> linkDao = helper.getLinkRuntimeExceptionDao();
linkDao.create(link);
OpenHelperManager.releaseHelper();
Toast.makeText(getActivity(),"Link has been added",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(),"Error, try change URL",Toast.LENGTH_LONG).show();
}
}
가 그리고 이것은 내 지식의 조각을
private void selectItem(int position) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if(position == 0)
ft.replace(R.id.content_frame, fragment_1);
else
ft.replace(R.id.content_frame, fragment_2);
ft.commit();
drawer_list.setItemChecked(position, true);
if(position == 0)
setTitle("Fragment 1");
else
setTitle("Fragment 2");
drawer_layout.closeDrawer(drawer_list);
}
나에게 용서해주세요 격차를 선택하는 것입니다, 저는 초보자입니다.
이 문제를 해결할 수 있습니까?
는 그리고이 얻을 :
01-14 07:29:38.335: D/AndroidRuntime(1813): Shutting down VM 01-14 07:29:38.335: D/AndroidRuntime(1813): --------- beginning of crash 01-14 07:29:38.335: E/AndroidRuntime(1813): FATAL EXCEPTION: main 01-14 07:29:38.335: E/AndroidRuntime(1813): Process: pl.nominalista.fragmentator, PID: 1813 01-14 07:29:38.335: E/AndroidRuntime(1813): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.widget.Toast.<init>(Toast.java:101) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.widget.Toast.makeText(Toast.java:250) 01-14 07:29:38.335: E/AndroidRuntime(1813): at pl.nominalista.fragmentator.Fragment1.addLink(Fragment1.java:101) 01-14 07:29:38.335: E/AndroidRuntime(1813): at pl.nominalista.fragmentator.Fragment1.access$0(Fragment1.java:91) 01-14 07:29:38.335: E/AndroidRuntime(1813): at pl.nominalista.fragmentator.Fragment1$getResult.onPostExecute(Fragment1.java:81) 01-14 07:29:38.335: E/AndroidRuntime(1813): at pl.nominalista.fragmentator.Fragment1$getResult.onPostExecute(Fragment1.java:1) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.os.AsyncTask.finish(AsyncTask.java:632) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.os.AsyncTask.access$600(AsyncTask.java:177) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.os.Handler.dispatchMessage(Handler.java:102) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.os.Looper.loop(Looper.java:135) 01-14 07:29:38.335: E/AndroidRuntime(1813): at android.app.ActivityThread.main(ActivityThread.java:5221) 01-14 07:29:38.335: E/AndroidRuntime(1813): at java.lang.reflect.Method.invoke(Native Method) 01-14 07:29:38.335: E/AndroidRuntime(1813): at java.lang.reflect.Method.invoke(Method.java:372) 01-14 07:29:38.335: E/AndroidRuntime(1813): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 01-14 07:29:38.335: E/AndroidRuntime(1813): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
'@Override \t \t 보호 문자열 doInBackground (문자열 PARAMS ...) { \t \t \t 문자열 링크의 PARAMS = [0]; \t \t \t 경우 (의 isCancelled는()) { \t \t \t \t Toast.makeText (getActivity(), Toast.LENGTH_LONG을 "취소") .show(); \t \t \t \t return null; \t \t \t} \t \t \t return GetSomething (link); \t \t} ' 코드를 추가했는데 위 부분 만 변경하면 AsyncTask를 사용하여 조각을 빠르게 변경하면 응용 프로그램이 중지되는 오류가 발생합니다. –
로그를 게시 할 수 있습니까? – EagleEye
코드의 낡은 부분을 남겨두고 현재 작동 중이거나 오류가 느려집니다.) –