java - 在闪屏期间动态选择 Activity

标签 java android json mobile

我正在做一个小项目,今天我必须在闪屏中进行条件验证。当我们决定在闪屏中进行此验证时,该项目实际上已经完成。

修改了我的类并且工作正常,但我必须包括飞溅消失的时间(变量 SPLASH_TIME_OUT)并开始给出我不明白的错误。

我的闪屏类(现在)是:

package com.clubee.vote;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class Splashscreen extends Activity {

// Splash screen timer

private static String url_Pesquisa_voto = "http://dev.clubee.com.br/dbvote/PesquisaVoto.php";
JSONParser jsonParser = new JSONParser();
private ProgressDialog pDialog;
private static final String TAG_SUCCESS = "success";

public String retrieveMacAddress(Context context) {
    WifiManager wfman = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    String macAddress = wfman.getConnectionInfo().getMacAddress();
    if (macAddress == null) {
        macAddress = "Dispositivo sem endereço mac address ou wi-fi desabilitado";
    }
    return macAddress;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new PesquisaVoto().execute();
}


class PesquisaVoto extends AsyncTask<String, String, String> {


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Splashscreen.this);
        pDialog.setMessage("Pesquisando Voto..");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    protected String doInBackground(String... args) {
        int SPLASH_TIME_OUT = 2000;
        WifiManager wfman = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        String macAddress = wfman.getConnectionInfo().getMacAddress();
        if (macAddress == null) {
            macAddress = "Dispositivo sem endereço mac";
        }

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("macAddress", macAddress));

        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_Pesquisa_voto, "GET", params);

        // check log cat from response
        Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);


            if (success == 1) {

                new Handler().postDelayed(new Runnable() {

                    public void run() {

                        Intent i = new Intent(Splashscreen.this, ResultadoFalho.class);
                        startActivity(i);

                        finish();
                    }
                }, SPLASH_TIME_OUT);
            } else {

                new Handler().postDelayed(new Runnable() {
                    public void run() {

                        Intent i = new Intent(Splashscreen.this, MainActivity.class);
                        startActivity(i);

                        finish();
                    }
                }, SPLASH_TIME_OUT);

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(String file_url) {

        pDialog.dismiss();
    }

   }
}

我收到的错误是:

03-03 17:38:49.882 10432-10450/com.clubee.vote D/Create Response﹕ {"voto":[{"count":"1"}],"success":1} 03-03 17:38:49.882 10432-10450/com.clubee.vote W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x4164dd88) 03-03 17:38:49.892 10432-10450/com.clubee.vote E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.clubee.vote, PID: 10432 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done

有人知道我做错了什么吗?是否可以在 IF 语句中实现 Runnable?如果我不设置超时变量,一切都是正确的。

更新有错误的日志

03-03 22:01:50.016 18731-18746/com.clubee.vote W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x4164dd88) 03-03 22:01:50.026 18731-18746/com.clubee.vote E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.clubee.vote, PID: 18731 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.(Handler.java:200) at android.os.Handler.(Handler.java:114) at com.clubee.vote.Splashscreen$PesquisaVoto.doInBackground(Splashscreen.java:87) at com.clubee.vote.Splashscreen$PesquisaVoto.doInBackground(Splashscreen.java:48) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237)             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)             at java.lang.Thread.run(Thread.java:841) 03-03 22:01:50.697 18731-18731/com.clubee.vote E/WindowManager﹕ android.view.WindowLeaked: Activity com.clubee.vote.Splashscreen has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{44aa2458 V.E..... R......D 0,0-681,345} that was originally added here at android.view.ViewRootImpl.(ViewRootImpl.java:350) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:294) at com.clubee.vote.Splashscreen$PesquisaVoto.onPreExecute(Splashscreen.java:58) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) at android.os.AsyncTask.execute(AsyncTask.java:535) at com.clubee.vote.Splashscreen.onCreate(Splashscreen.java:44) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5135) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) at dalvik.system.NativeStart.main(Native Method) 03-03 22:01:52.529 18731-18746/com.clubee.vote I/Process﹕ Sending signal. PID: 18731 SIG: 9

最佳答案

提前感谢您的回答和评论。我更正了我的代码,重新编写并重新构建了它,变得更容易看到错误在哪里。

下面,我留下了可供 future 研究使用的代码。非常感谢

package com.clubee.vote;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class Splashscreen extends Activity {

// Splash screen timer

private static String url_Pesquisa_voto = "http://dev.clubee.com.br/dbvote/PesquisaVoto.php";
JSONParser jsonParser = new JSONParser();
private ProgressDialog pDialog;
private static final String TAG_SUCCESS = "success";
private  static int SPLASH_TIME_OUT = 2000;

public String retrieveMacAddress(Context context) {
    WifiManager wfman = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    String macAddress = wfman.getConnectionInfo().getMacAddress();
    if (macAddress == null) {
        macAddress = "Dispositivo sem endereço mac address ou wi-fi desabilitado";
    }
    return macAddress;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

            new PesquisaVoto().execute();
        }
    }, SPLASH_TIME_OUT);
}

class PesquisaVoto extends AsyncTask<String, String, String> {


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Splashscreen.this);
        pDialog.setMessage("Pesquisando Voto..");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    protected String doInBackground(String... args) {
        WifiManager wfman = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        String macAddress = wfman.getConnectionInfo().getMacAddress();
        if (macAddress == null) {
            macAddress = "Dispositivo sem endereço mac";
        }

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("macAddress", macAddress));

        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_Pesquisa_voto, "GET", params);

        // check log cat from response
        Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);


            if (success == 1) {


                Intent i = new Intent(Splashscreen.this, ResultadoFalho.class);
                startActivity(i);

            }
            else {


                Intent i = new Intent(Splashscreen.this, MainActivity.class);
                startActivity(i);

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(String file_url) {

        pDialog.dismiss();
    }

   }
}

关于java - 在闪屏期间动态选择 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841728/

相关文章:

java - 强制 javamailsender 进行身份验证

java - 使用错误的 wsdl 实现 SOAP Web 服务

android - 在 ListActivity 中显示 SQL 连接的结果

java - 如何更改codenameone android应用程序中状态栏的颜色?

java - 如何将单个子 xml 元素转换为 Json 数组

java - 在 GWT 中使用 JSONParser 的问题

JavaScript 递归验证

java - 我需要帮助解析有关数据类的 GAE/Java 文档中的此语句

android - 解锁屏幕后防止重新创建 Activity

java - 寻找日期格式的最佳正则表达式模式