Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用getSupportFragmentManager()_Java_Android_Database_Image_Android Fragments - Fatal编程技术网

Java 调用getSupportFragmentManager()

Java 调用getSupportFragmentManager(),java,android,database,image,android-fragments,Java,Android,Database,Image,Android Fragments,在两个不同的事件中,我将变量从MainActivity传递到HomeFragment,如下所示: public void buttonCreator(Drawable d,String a) { int fragsize = getSupportFragmentManager().getFragments().size(); Log.d("tag_name", "Size of Home Fragment" + fragsize); HomeFragment homeFr

在两个不同的事件中,我将变量从MainActivity传递到HomeFragment,如下所示:

public void buttonCreator(Drawable d,String a) {
    int fragsize = getSupportFragmentManager().getFragments().size();
    Log.d("tag_name", "Size of Home Fragment" + fragsize);
    HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().getFragments().get(1);
    homeFragment.createButton(d, a);
}
首先,我在MainActivity中调用此方法:

buttonCreator(d, Name);
然后我将变量“d”和“Name”发送到HomeFragment,如下所示:

public void buttonCreator(Drawable d,String a) {
    int fragsize = getSupportFragmentManager().getFragments().size();
    Log.d("tag_name", "Size of Home Fragment" + fragsize);
    HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().getFragments().get(1);
    homeFragment.createButton(d, a);
}
第一次调用buttonCreator(d,Name)时,我没有收到任何错误第二次尝试通过buttonCreator将变量传递给HomeFragment时,出现错误“IndexOutOfBoundsException:无效索引1,大小为1”。我认为这与HomeFragment的数组大小有关,但我不完全理解此处片段和数组之间的关系

我知道第一次尝试访问HomeFragment时,我调用:

int fragsize = getSupportFragmentManager().getFragments().size();
我得到的输出是“3”,第二次调用它时(当它崩溃时),我得到的输出是“1”有人能解释一下为什么会发生这种情况,以及我如何解决这个问题吗?

这是我的全部主要活动,如果有帮助的话。我第一次调用buttonCreator是在“RepeaterTask”中,第二次(当它崩溃时)是通过onCreate(),通过“else”语句

public class MainActivity extends FragmentActivity implements HomeFragment.ButtonCreator {


private Thread repeatTaskThread;
private byte[] byteArray;
private static Context mContext;
private Cursor c;

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

   mContext = getApplicationContext();

   DatabaseStructure database = new DatabaseStructure(mContext);
   database.checkDatabase();


   // if database is empty (checkDatabase == false) Open empty HomeFragment
   if (!database.checkDatabase()) {

       Log.d("tag_name", "Database is Empty: Open HomeFragment");

       FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
       ft.replace(R.id.container, new HomeFragment(),"Home_Fragment")
               .addToBackStack("Home_Fragment").commit();
   }

   else {

       DatabaseStructure appDatabase = new DatabaseStructure(this);
       c = appDatabase.getApps();
       c.moveToFirst();

       String Name = c.getString(0);
       Log.d("tag_name", "String from Database" + appName);
       byte[] image = c.getBlob(1);
       Log.d("tag_name", "Image from Database" + image);


       Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
       Drawable d = new BitmapDrawable(Resources.getSystem(), bitmap);
       Log.d("tag_name", "Drawable from Database" + d);

       buttonCreator(d, Name);
   }

   RepeatTask();

}


public void buttonCreator(Drawable d,String a) {
    int fragsize = getSupportFragmentManager().getFragments().size();
    Log.d("tag_name", "Size of Home Fragment" + fragsize);
    HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().getFragments().get(1);
    homeFragment.createButton(d, a);
}



public void RepeatTask() {

    repeatTaskThread = new Thread() {
        public void run() {

            while (true) {

                try {

                    Socket socket = new Socket("192.168.0.26", 5050);

                    // Get data sent through socket
                    DataInputStream DIS = new DataInputStream(socket.getInputStream());

                    System.out.println("DataInputStream Started");
                    final String Name = DIS.readUTF();
                    int len = DIS.readInt();
                    final byte[] data = new byte[len];

                    DIS.readFully(data, 0, data.length);

                    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

                    final Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 90, 90, true));


                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            buttonCreator(d, Name);

                            DatabaseStructure database = new DatabaseStructure(mContext);
                            database.addEntry(Name, data);

                        }
                    });


                    socket.close();

                } catch (Exception e) {

                    System.out.println("Exception is " + e.toString());
                }

                try {
                    // Sleep for 5 seconds
                    Thread.sleep(5000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        ;
    };
    repeatTaskThread.start();
}

}

数组和列表的索引是从零开始的(第一个索引是0而不是1),所以请尝试


如果我这样做,我的应用程序在您想要获取另一个片段时崩溃,并出现错误“无法启动活动”,通常不应尝试在列表中查找它。如果您已经设置了id()或标记(),请按id()或标记()查找。@zapl当我这样做时:“HomeFragment hm=(HomeFragment)getSupportFragmentManager().findFragmentByTag(“Home_Fragment”);Log.d(“tag_name”,“HomeFragment”+hm);hm.createButton(d,appName);“我得到hm=null:(试图解决这个问题。