Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Problems with QAndroidActivityResultReceiver
Forum Updated to NodeBB v4.3 + New Features

Problems with QAndroidActivityResultReceiver

Scheduled Pinned Locked Moved Solved Mobile and Embedded
2 Posts 1 Posters 511 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BlasterB Offline
    BlasterB Offline
    Blaster
    wrote on last edited by
    #1

    Hello, I am trying to capture the result of choosing a contact, but the handleActivityResult () method does not finish the job. It starts correctly, but when trying to access the method proccessData () stops completely at runOnAndroidThread().

    The redefinition of the handleActivityResult () method looks like this:

    void MyReciever::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data)
    {
        jint RESULT_OK = QAndroidJniObject::getStaticField<jint>("android/app/Activity", "RESULT_OK");
        if(receiverRequestCode == 1 && resultCode == RESULT_OK)
        {
            QAndroidJniObject valor;
            qDebug()<<"HANDLEACTIVITYRESULT  RESULT_OK && RECUESTCODE";
            QtAndroid::runOnAndroidThread([&data, &valor] {
                qDebug()<<"HANDLEACTIVITYRESULT ENTER THREAD SYNC";
                QAndroidJniObject java("cu/cibertools/regcharge/fetch/FetchClass");
                valor = java.callObjectMethod("proccessData", "(Landroid/content/Intent;)Ljava/lang/String;",
                                                                  data.object<jobject>());
                qDebug()<<"HANDLEACTIVITYRESULT DATA PROCCESSED";
            });
            QString cad = valor.toString();
    
            if(!cad.isEmpty())
            {
                QStringList list = cad.split(";", QString::SkipEmptyParts);
                m_contactName = list.at(0);
                m_contactNumber = list.at(1);
                qDebug()<<"m_contactName:"<<m_contactName<<"m_contactNumber:"<<m_contactNumber;
                emit this->contactNumberChanged();
                emit this->contactNameChanged();
            }
            else
            {
                qDebug()<<"RETURN STRING IS EMPTY";
            }
    
        }
    }
    

    The proccessData() method is this:

    public String proccessData(Intent data)
        {
            Cursor cursor = null;
            String ret = "PROCCESSDATA RETORNO";
                    String phoneNo = null ;
                    String name = null;
                    // getData() method will have the Content Uri of the selected contact
                    Uri uri = data.getData();
                    //Query the content uri
                    cursor = getContentResolver().query(uri, null, null, null, null);
                    cursor.moveToFirst();
                    // column index of the phone number
                    int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                    // column index of the contact name
                    int  nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                    // Getting values from cursor
                    phoneNo = cursor.getString(phoneIndex);
                    name = cursor.getString(nameIndex);
                    // Set the value to the textviews
                    ret = name + ";" + phoneNo;
            return ret;
        }
    

    Can someone tell me what I should change? It's wrong?

    1 Reply Last reply
    0
    • BlasterB Offline
      BlasterB Offline
      Blaster
      wrote on last edited by
      #2

      I already resolved it.
      In my handleActivityResult():

      void MyReciever::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data)
      {
          jint RESULT_OK = QAndroidJniObject::getStaticField<jint>("android/app/Activity", "RESULT_OK");
      //    qDebug()<<"HANDLEACTIVITYRESULT ISMAEL";
          if(receiverRequestCode == 1 && resultCode == RESULT_OK)
          {
                          QAndroidJniObject contentResolver = QtAndroid::androidActivity().callObjectMethod("getContentResolver",
                                                                  "()Landroid/content/ContentResolver;");
              QAndroidJniObject ret = QAndroidJniObject::callStaticObjectMethod("cu/cibertools/regcharge/fetch/FetchClass",
                                                                                "dataProccess",
                                                                                "(Landroid/content/Intent;Landroid/content/ContentResolver;)Ljava/lang/String;",
                                                                                data.object<jobject>(), contentResolver.object<jobject>());
              if(ret.isValid())
              {
                  QString cad = ret.toString();
      //            qDebug()<<"RETORNO"<<cad<<"FIN RETORNO";
                     if(!cad.isEmpty())
                     {
                         QStringList list = cad.split(";", QString::SkipEmptyParts);
                         m_contactName = list.at(0);
                         m_contactNumber = list.at(1);
      //                   qDebug()<<"m_contactName:"<<m_contactName<<"m_contactNumber:"<<m_contactNumber;
                         emit this->contactNumberChanged();
                         emit this->contactNameChanged();
                     }
              }
          }
      }
      

      In my java class:

      public static String dataProccess(Intent data, ContentResolver resolver)
      {
          Cursor cursor = null;
          String retorno = null;
          String phoneNo = null;
          String name = null;
      
          Uri uri = data.getData();
      
          cursor = resolver.query(uri, null, null, null, null);
      
          cursor.moveToFirst();
      
          int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
      
          int  nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
      
          phoneNo = cursor.getString(phoneIndex);
      
          name = cursor.getString(nameIndex);
      
          retorno = name + ";" + phoneNo;
      
          cursor.close();
      
          return retorno;
      }
      
      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved