求助!为什么会Unable to instantiate activity ComponentInfo

巴特桑 2014-07-03 10:38:50
小弟才接触android开发不久
现在想要写一个调用手机红外端口遥控空调的小APP
在ADT中没有显示错误,但是真机运行报如下错误:


07-03 10:25:46.268: D/AndroidRuntime(1058): Shutting down VM
07-03 10:25:46.278: W/dalvikvm(1058): threadid=1: thread exiting with uncaught exception (group=0xb1a84ba8)
07-03 10:25:46.298: E/AndroidRuntime(1058): FATAL EXCEPTION: main
07-03 10:25:46.298: E/AndroidRuntime(1058): Process: com.studiocean.m_remote, PID: 1058
07-03 10:25:46.298: E/AndroidRuntime(1058): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.studiocean.m_remote/com.studiocean.m_remote.MainActivity}: java.lang.NullPointerException
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.os.Handler.dispatchMessage(Handler.java:102)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.os.Looper.loop(Looper.java:136)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread.main(ActivityThread.java:5017)
07-03 10:25:46.298: E/AndroidRuntime(1058): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 10:25:46.298: E/AndroidRuntime(1058): at java.lang.reflect.Method.invoke(Method.java:515)
07-03 10:25:46.298: E/AndroidRuntime(1058): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-03 10:25:46.298: E/AndroidRuntime(1058): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-03 10:25:46.298: E/AndroidRuntime(1058): at dalvik.system.NativeStart.main(Native Method)
07-03 10:25:46.298: E/AndroidRuntime(1058): Caused by: java.lang.NullPointerException
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.Activity.findViewById(Activity.java:1884)
07-03 10:25:46.298: E/AndroidRuntime(1058): at com.studiocean.m_remote.MainActivity.<init>(MainActivity.java:17)
07-03 10:25:46.298: E/AndroidRuntime(1058): at java.lang.Class.newInstanceImpl(Native Method)
07-03 10:25:46.298: E/AndroidRuntime(1058): at java.lang.Class.newInstance(Class.java:1208)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
07-03 10:25:46.298: E/AndroidRuntime(1058): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
07-03 10:25:46.298: E/AndroidRuntime(1058): ... 11 more
07-03 10:26:35.578: I/Process(1058): Sending signal. PID: 1058 SIG: 9


以下是源代码:

MainActivity.java

package com.studiocean.m_remote;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainActivity extends Activity {

private boolean isACOn = false;

TextView statusDisplay = (TextView)findViewById(R.id.statusDis);

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

if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}

public IrHandler irHandler = new IrHandler(getBaseContext());

public void onPowerSwitchClicked(View view) {
if (!isACOn) statusDisplay.setVisibility(View.VISIBLE);
else statusDisplay.setVisibility(View.INVISIBLE);
irHandler.setStrCode("POWER_SWITCH");
}
}


IrHandler.java

package com.studiocean.m_remote;

import android.content.Context;
import android.hardware.ConsumerIrManager;

public class IrHandler {

String tmpStrCode = "";
Context tmpCtx;

public IrHandler() {
}

public IrHandler(Context context) {
tmpCtx = context;
}

ConsumerIrManager consumerIrManager = (ConsumerIrManager) tmpCtx.getSystemService(Context.CONSUMER_IR_SERVICE);

public void setStrCode(String strCode) {
tmpStrCode = strCode;
moduleStr();
}

public void moduleStr() {
switch (tmpStrCode)
{
case "POWER_SWITCH":
consumerIrManager.transmit(38400, new int[] {1901, 4453, 625, 1614, 625, 1588, 625, 1614, 625, 442, 625, 442, 625, 468, 625, 442, 625, 494, 572, 1614, 625, 1588, 625, 1614, 625, 494, 572, 442, 651, 442, 625, 442, 625, 442, 625, 1614, 625, 1588, 651, 1588, 625, 442, 625, 494, 598, 442, 625, 442, 625, 520, 572, 442, 625, 442, 625, 442, 651, 1588, 625, 1614, 625, 1588, 625, 1614, 625, 1588, 625, 48958});
break;
case "MODE_SELECTION":
consumerIrManager.transmit(38000, null);
break;
case "TEMPERATURE_UP":
consumerIrManager.transmit(38000, null);
break;
case "TEMPERATURE_DOWN":
consumerIrManager.transmit(38000, null);
break;
default:
break;
}
}
}


不知是为何?
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangweia 2015-03-24
  • 打赏
  • 举报
回复
android开发5年经验了,你的问题可以联系,我帮你解决。 775925302,另外我也正在研究红外控制的模块,可以一起讨论
夏布旅人 2014-11-17
  • 打赏
  • 举报
回复
把源代码发过来我帮你看看。
巴特桑 2014-07-04
  • 打赏
  • 举报
回复
引用 1 楼 rtyou1234 的回复:
TextView statusDisplay = (TextView)findViewById(R.id.statusDis); 把findviewbyid放到setContentView(R.layout.activity_main);后面,布局都还没加载,怎么找到view
引用 2 楼 u012861744 的回复:
初始的时候顺序错了,界面还没有加载进来,不要给他任何东西!
两位大大: 好像我这版本的ADT初始一个项目之后就会有fragment,所以是我把界面布局直接放在fragment_main.xml里面的,现在我将TextView statusDisplay = (TextView)rootView.findViewById(R.id.statusDis);一句放在onCreateView下的View rootView = inflater.inflate(R.layout.fragment_main, container, false);后面,但ADT提示statusDisplay is not used(在后面的onPowerSwitchClicked里面我有调用啊)? 然后我尝试把

TextView statusDisplay = (TextView)rootView.findViewById(R.id.statusDis);

public void onPowerSwitchClicked(View view) {
    	if (!isACOn) statusDisplay.setVisibility(View.VISIBLE);
    		else statusDisplay.setVisibility(View.INVISIBLE);
    	irHandler.setStrCode("POWER_SWITCH");
这两段都删掉,结果LogCat还是报一样的错误信息啊 是因为我的IrHandler写的有问题吗?
Nelson.Feng 2014-07-04
  • 打赏
  • 举报
回复
初始的时候顺序错了,界面还没有加载进来,不要给他任何东西!
逍遥笑 2014-07-04
  • 打赏
  • 举报
回复
TextView statusDisplay = (TextView)findViewById(R.id.statusDis); 把findviewbyid放到setContentView(R.layout.activity_main);后面,布局都还没加载,怎么找到view
巴特桑 2014-07-04
  • 打赏
  • 举报
回复
引用 1 楼 rtyou1234 的回复:
TextView statusDisplay = (TextView)findViewById(R.id.statusDis); 把findviewbyid放到setContentView(R.layout.activity_main);后面,布局都还没加载,怎么找到view
引用 2 楼 u012861744 的回复:
初始的时候顺序错了,界面还没有加载进来,不要给他任何东西!
刚刚又试了一下,貌似只能把

private IrHandler irHandler = new IrHandler(getBaseContext());
也删掉才能显示界面,那是我的IrHandler写得有问题吗?

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧